Linux中國

2020 年微服務現狀

微服務架構風格是一種將 單個應用程序 開發為一套 小型服務 的方法,每個服務都在 自己的進程中運行,並使用輕量級的通信機制(通常是 HTTP 類型的 API)進行通信。這些服務是圍繞 業務能力 構建的,並且可以通過 全自動化的部署機制 進行 獨立部署。目前對這些服務幾乎沒有集中的管理,這些服務可以用 不同的編程語言 編寫,也能使用 不同的數據存儲技術。」

—— James Lewis 和 Martin Fowler (2014) [1]

介紹

預計在 2020 年,全球雲端的微服務市場將以 22.5% 的速度增長,其中美國市場預計將保持 27.4% 的增長率 [2] 。目前的趨勢是,開發人員將從本地託管的應用程序轉移到雲端。這將有助於企業最大限度地減少停機時間、優化資源並降低基礎設施成本。同時專家們還預測,到了 2022 年,90% 的應用程序將會使用微服務架構進行開發 [2:1] 。本文將幫助你了解什麼是微服務,以及目前的公司如何使用它的。

什麼是微服務?

微服務已經在全球範圍內被廣泛使用。但是,微服務到底是什麼?微服務是一種基於許多小型、互聯服務的體系結構模式。它們基於 單一責任原則。根據 Robert C. Martin 的說法,「將因相同原因而變化的事物聚集起來,將因不同原因而變化的事物分離開來」。 [3] 微服務架構也被擴展到了 松耦合服務 中,可以 獨立地開發、部署和維護 [3:1]

遠離單體架構

微服務通常和傳統的單體軟體架構做對比。在單體架構中,軟體是被設計為自足的,也就是說,這個程序中的各個組件都是互相連通和互相依賴的,而不是鬆散耦合的。在一個緊耦合的架構中( 單體 monolithic ),每個組件和它相關聯的組件必須按照指定的順序組合起來,才能被執行或編譯 [4] 。當其中有一個組件需要更新時,整個應用都要被重寫。

而這個現象在使用微服務架構的應用中就不會出現。因為每一個模塊都是獨立的,每個模塊都可以更新修改而不影響程序的其他部分。因此,降低了對更改一個組件會對其他組件造成影響的風險。

如果公司的架構很難升級,或者維護過於複雜和昂貴,那麼他們可能會遇到麻煩,不能擴展單體架構的應用 [5] 。把一個複雜的任務分解成小組件,彼此獨立工作,就是解決這個問題的方法。

單一體系架構 vs. 微服務架構 (圖片來自 [6]

開發者如何構建屬於自己的微服務

微服務以提高可擴展性性能而聞名。然而,這些是世界各地的開發者開發屬於他們自己的微服務的主要原因嗎?《微服務 2020 研究現狀》 [7] 披露了全球開發者如何構建他們的微服務,以及他們對微服務的看法。這份報告是在來自歐洲、北美、中南美洲、中東、東南亞、澳大利亞和紐西蘭的 660 名微服務專家的幫助下完成的。下表列出了微服務成熟度相關問題的平均評分 [7:1]

分類 平均得分(滿分為5分)
創建新項目 3.8
維護與調試 3.4
工作效率 3.9
解決可擴展性問題 4.3
解決性能問題 3.9
團隊合作 3.9

從上表可知,大部分專家都對使用微服務來解決可擴展性問題感到滿意。與之相反的是,維護與調試對他們來說似乎是一個挑戰。

從他們所使用的架構技術來說,大部分專家使用 Javascript/Typescript (大約 ⅔ 的微服務是使用這些語言構建的),其次使用的是 Java。

儘管有很多部署微服務的選擇,但大多數專家使用 AWS(49%),其次是他們自己的伺服器。另外,有 62% 的人更喜歡用 AWS Lambda 作為無伺服器解決方案。

這些人所使用的大多數微服務都使用 HTTP 進行通信,其次是 events 和 gRPC。此外,大多數專家將 RabbitMQ 用於消息代理,其次是 Kafka 和 Redis。

而且,大多數人使用微服務持續集成(CI)。在報告中,87% 的受訪者使用諸如 GitLab CI、Jenkins 或 GitHub Actions 等 CI 解決方案。

在 86% 的受訪者中,最受歡迎的調試解決方案是日誌,其中 27% 的受訪者使用日誌。

最後,大多數人認為微服務架構將成為更複雜的系統或後端開發的標準。

微服務的成功案例

許多公司已經從單體架構轉向微服務架構。

亞馬遜

在 2001 年,開發延遲、編碼挑戰和服務相互依賴性使得 亞馬遜 Amazon 無法滿足其不斷增長的用戶群的可擴展性需求。由於需要從頭開始重構他們的單體架構,亞馬遜將其單體架構應用程序拆分為小型的、獨立的、針對服務的應用程序 [6:1] [8]

2001 年,在微服務這個詞開始流行之前的幾年,亞馬遜決定改用微服務。這一變化使得亞馬遜開發了好幾種支持微服務架構的解決方案,比如亞馬遜 AWS。隨著對微服務的快速增長和適應,亞馬遜成為全球市值最高的公司,截至 2020 年 7 月 1 日,亞馬遜市值為 1.433 萬億美元 [9]

奈飛

奈飛 Netflix 於 2007 年開始提供電影流媒體服務,到了 2008 年,它也面臨著規模擴張的挑戰。期間,他們經歷了一次嚴重的資料庫損壞,在三天之內,他們不能將 DVD 發送給他們的會員 [10] 。這一事故使他們意識到需要將單點故障(如關係資料庫)轉向雲中更可伸縮和更可靠的分散式系統。於是 2009 年,奈飛開始將其單體架構的應用重構為微服務。他們首先將其非面向客戶的電影編碼平台遷移到雲端作為獨立的微服務運行 [11] 。在改用微服務之後,使奈飛能夠解決擴展性挑戰和服務中斷的問題。並且它還允許他們按照每個流數據而不是數據中心的成本來降低成本 [10:1] 。今天,奈飛每天向 190 個國家的 1.39 億訂戶發送約 2.5 億小時的內容 [11:1]

Uber

在推出 Uber 服務之後,他們在開發和發布新功能、修復 bug,以及迅速整合新的變化方面遇到了困難。因此,他們決定改用微服務,並將應用程序結構拆分為基於雲的微服務。換句話說,Uber 為每個功能創建了一個微服務,比如乘客管理和出行管理。轉向微服務給 Uber 帶來了很多好處,比如對每項服務的所有權都有一個清晰的概念。這提高了服務訪問的速度和質量,通過允許團隊只關注他們需要擴展的服務,在更新虛擬服務的同時而不中斷其他服務,實現了更可靠的容錯,從而促進了快速擴展 [11:2]

這就是可擴展性!

關於如何提供可伸縮性的一個很好的例子是看看中國。中國人口眾多,必須通過創造和試驗新的解決方案來適應規模化的新挑戰。統計數據顯示,中國目前為大約 9 億互聯網用戶提供服務 [12] 。2019 年「雙十一」期間(相當於國外的黑色星期五),阿里巴巴旗下各購物平台的交易峰值為每秒 544000 筆交易。阿里雲處理的數據總量約為 970 PB [13] 。那麼,這些數量的用戶在技術上意味著什麼呢?

為了解決可伸縮性問題,許多技術應運而生。例如,Tars 由騰訊於 2008 年創建,2018 年貢獻給 Linux 基金會。它也在被大規模使用,並在 10 年內得到了很大的提升 [14] 。TARS 是開源的,許多組織都在大力貢獻和擴展框架的特性和價值 [14:1] 。TARS 支持多種編程語言,包括 C++、Golang、java、node.js、PHP 和 Python;它可以快速構建系統並自動生成代碼,使開發人員能夠專註於業務邏輯,從而有效地提高操作效率。TARS 已廣泛應用於騰訊的 QQ、微信社交網路、金融服務、邊緣計算、汽車、視頻、網路遊戲、地圖、應用市場、安全等諸多核心業務。在 2020 三月,TARS 項目轉變為 TARS 基金會,這是一個開源微服務基金會,在建立開放式微服務平台的社區方面中,致力於提升社區貢獻和成員的快速增長 [14:2]

一定要看看 Linux 基金會新的免費培訓課程:《用 TARS 構建微服務平台

關於作者:

Isabella Ferreira 是 Linux 基金會旗下的開源微服務基金會 TARS 基金會的佈道師

Mark Shan(單致豪)是騰訊開源聯盟的主席,也是 TARS 基金會的董事會主席。

本篇 Linux 基金會白金贊助商內容由騰訊貢獻。

  1. https://martinfowler.com/articles/microservices.html#footnote-etymology ↩︎
  2. https://www.charterglobal.com/five-microservices-trends-in-2020/ ↩︎ ↩︎
  3. https://medium.com/hashmapinc/the-what-why-and-how-of-a-microservices-architecture-4179579423a9 ↩︎ ↩︎
  4. https://whatis.techtarget.com/definition/monolithic-architecture ↩︎
  5. https://www.leanix.net/en/blog/a-brief-history-of-microservices ↩︎
  6. https://www.plutora.com/blog/understanding-microservices ↩︎ ↩︎
  7. https://tsh.io/state-of-microservices/#ebook ↩︎ ↩︎
  8. https://thenewstack.io/led-amazon-microservices-architecture/ ↩︎
  9. https://ycharts.com/companies/AMZN/market_cap ↩︎
  10. https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration ↩︎ ↩︎
  11. https://blog.dreamfactory.com/microservices-examples/ ↩︎ ↩︎ ↩︎
  12. https://www.statista.com/statistics/265140/number-of-internet-users-in-china/ ↩︎
  13. https://interconnected.blog/china-scale-technology-sandbox/ ↩︎
  14. https://www.linuxfoundation.org/blog/2020/03/the-tars-foundation-the-formation-of-a-microservices-ecosystem/ ↩︎ ↩︎ ↩︎

via: https://www.linux.com/news/the-state-of-the-art-of-microservices-in-2020/

作者:Linux.com 選題:lujun9972 譯者:zhangxiangping 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國